home *** CD-ROM | disk | FTP | other *** search
/ Aminet 21 / Aminet 21 (1997)(GTI - Schatztruhe)[!][Oct 1997].iso / Aminet / util / libs / Tran43pch.lha / _Patch43 / update.man < prev    next >
Encoding:
Text File  |  1997-07-03  |  26.7 KB  |  675 lines

  1.                               Update Manual
  2.  
  3.                     translator.library - Version 43.1
  4.                          Update from Version 42.4
  5.  
  6.  
  7.                                3 July 1997
  8.  
  9.                                M. L. Barlow
  10.  
  11.  
  12. 1.   Status.
  13.  
  14.   Version 42.4/43.1 of the translator library is not in the public domain.
  15. Source is available for Version 42.4.  The library and accent files are
  16. freely distributable provided no profit is made from them. Accent files may
  17. have additional or separate restrictions placed on them by their authors.
  18.  
  19. 2.   Introduction.
  20.  
  21.   This version of the Translator Library was developed from the source code
  22. posted to the Aminet by Francesco Devitt.  As such it remains largely his
  23. work.  This version adds new accent file rules to facilitate number
  24. expression and fixes three problems I have encountered with the original
  25. Translator42.  Version 43.1 adds the placement of the Narrator escape code
  26. sequence after the end of the translated text output string to achieve
  27. compatibility with those programs that give the whole translation buffer to
  28. the Narrator. The basic changes from version 42.4  to 43.0 are as follows:
  29.  
  30.                     (Enhanced Syntax for Accent Files)
  31.  
  32. 2.1  Added Empty Match Condition.
  33.  
  34.   Extra text may be inserted into the output string based on the text
  35. pattern defined by the prefix and suffix rules alone.  This allows for the
  36. insertion of "thousand" or "hundred" in number strings with a single
  37. statement.  An empty match is indicated by [¶] or [¶@] in the match string
  38. (¶ is ALT-P).  Only one empty match is allowed at any text location.
  39.  
  40. 2.2  Added Suffix Text Induction Feature.
  41.  
  42.   Suffix pattern matching text characters may now be pulled into the
  43. bracket delimited text-replacement string.  Text may be pulled in ahead 
  44. {& replace-text }  or behind {! replace-text} the replacement text. 
  45. Multiple characters may be pulled in by repeating the & or ! characters. 
  46. The whole suffix match will be pulled in if {&* or {!* is specified.  This
  47. last feature can be used to convert $45,701 to:  {45,701 dollars} with
  48. rule:
  49.  
  50.      %class numeric   0 1 2 3 4 5 6 7 8 9 \. \,
  51.      [$](numeric+) = {&* dollars}.
  52.  
  53. 2.3  Added Zero or One Match Condition.
  54.  
  55.   It is now possible to specify a zero or one match condition.  This
  56. allows the specification of optional prefixes or suffixes that only occur
  57. once.
  58.  
  59.                             (Problems Solved)
  60.  
  61. 2.4  Fixed Word Separator Problem.
  62.  
  63.   Translator42 does not recognize the same set of word separators as the
  64. original Translator37.  This causes unusual pronunciation when punctuation
  65. marks or numbers are combined with text.  In Translator43 the %Separator
  66. statement of Translator42 has been replaced by an %Alphabet statement.  All
  67. characters not in this Alphabet Set are treated as word-separators.  The
  68. default alphabet does include the ISO-8859-1 international characters.
  69.  
  70. 2.5  Fixed Buffer Overrun Problem.
  71.  
  72.   Translator42 may crash your system if the buffer that is provided by the
  73. program using this library is not large enough to handle the resulting
  74. text. The translator is supposed to stop short if this happens and report
  75. how much text it did translate.  Translator37 does this.  However,
  76. Translator42 can fail to notice the end of the buffer and continue on
  77. writing into unauthorized memory space.  This problem is now fixed.
  78.  
  79. 2.6  Fixed The False, In-line Text Command Problem.
  80.  
  81.   Translator42 allows accent and scope changes to be made by in-line text
  82. commands delimited by simple braces and backslashes.  This can be a problem
  83. when reading general text that may contain these characters or ASCII art. 
  84.  
  85.   Translator42 does allow this feature to be turned off using the
  86. Translator42 preference tool to delete these characters in the boxes
  87. provided.  It should not be necessary to do this with translator43.
  88.  
  89.   Translator43 reduces the severity of this problem by requiring that a
  90. rubout character, 7F hex, precede each in-line text command in the text
  91. being read.
  92.  
  93.  
  94. 2.7  Added Assembly Code Modules.
  95.  
  96.   Several simple repetitive routines, including the built-in unsigned byte
  97. strchr() routine, have been replaced by hand optimized assembly modules for
  98. increased processing speed.
  99.  
  100.                             (Problem Avoided)
  101.  
  102. 2.8  Dropped External Language Reference Rule Capability.
  103.  
  104.   This feature only works in Translator42 if the user does not disable or
  105. change the definitions of the in-line language or scope changing rules. 
  106. This rarely used feature was dropped due to the performance impact and
  107. complexity of the filter that would be required to prevent text induction
  108. of false scope codes.
  109.  
  110. 3.    Requirements.
  111.  
  112.   A complete installation of Translator42.4 or Translator43.0 is required.
  113. See the section 3 of Translator.man supplied with Translator42 for that
  114. installation procedure, if required.  Upgrading to 43.0 or downgrading to
  115. 42.4 is not required for this patch.
  116.  
  117. 4.    Installation.
  118.  
  119.  
  120. 4.1.  (Optional Precaution) Back-up your SYS: partition, or Libs:
  121.       directory.
  122.  
  123. 4.2.  Install Translator42.4 if this has not been done.  This step is _NOT_
  124.       required if you have already upgraded to Translator43.0.  This patch
  125.       only works on fully installed versions of Translator42.4 or 43.0.
  126.  
  127. 4.3.  Unpack the Tran43pch archive to a convenient directory.
  128.  
  129. 4.4   Stop and close out (exit/quit) all programs that might be using the
  130.       translator.library.  If possible, don't start any such programs
  131.       before the installation.
  132.  
  133. 4.5.  Run the Installer Script by clicking on the Install icon in the
  134.       unpacking directory.  This patches the installed sub-type (v.33, v37,
  135.       or 020) of Translator42.4 or Translator43.0 to the equivalent
  136.       Translator43.1 sub-type. The previous translator.library will be
  137.       renamed to translator42.4xlibrary or translator43.0xlibrary and a new
  138.       translator.library will be patched in.  If you are upgrading from
  139.       42.4 and have the Italiano.accent in your Locale:accents directory,
  140.       this accent will be renamed to Italiano42.Xaccent and a new
  141.       Italiano.accent will also be patched in.  This new accent has only
  142.       one line changed for compatibility with Translator43.  If you elect
  143.       to create a log file, this file will be created in the unpack
  144.       directory you have selected.
  145.  
  146. 4.6.  If the old translator.library was resident in ram: do to prior use,
  147.       it may be necessary to use "avail flush" or "flushlib
  148.       translator.library remove" or reboot the system before the upgrade
  149.       takes effect.
  150.  
  151. 4.7.  (Optional) copy the Update.man file to a directory of your choice for
  152.       future reference.
  153.  
  154. 4.8.  (Optional) Unpack the Specialized Translator43 Accent files and copy 
  155.       them to Locale:accents.
  156.  
  157.  
  158. 5.    New Accent Files.
  159.  
  160.     The new accent files will be uploaded independently.  I am using an
  161. "Ax_(n)" format prefix on the archive name to group them together and
  162. assure that version information is not lost if the names are truncated to
  163. 8.3 format.  Use a directory utility to copy these demo accent files to
  164. your Locale:Accents directory if you wish.  Most of these accent files are
  165. experimental, as I only speak USA-English.  I have chosen city names to
  166. indicate the experimental nature of these accents.
  167.  
  168. 5.1    Berlin.Accent. (Ax_1Berlin.lha)
  169.  
  170.     An experimental German accent demonstrating some of the new features of
  171. this version and some special phoneme combinations to overcome the lack of
  172. the proper German CH sounds in Narrator 37.7.  The name "Berlin" is chosen
  173. to distinguish it from the authentic deutsch.accent developed by native
  174. German speakers. It was developed from the deutsch.accent, version 0.1 By
  175. Stefan Zeiger and the rules stated in the Pronunciation chapter, pp
  176. 265-267, of "Der Anfang (Understanding and Using German)" by  Harold von
  177. Hofe, 1958. This accent is optimized for use with Narrator 37.7  and
  178. requires Translator43.
  179.  
  180. 5.2  Chaucer.Accent.  (Ax_0Chaucer.lha)
  181.  
  182.     An experimental generalized Middle English accent.  English before the
  183. "Great Vowel Shift" with trilled Rs and guttural gh sound.  Based on the
  184. brief description of Middle English in "A History of the English Language"
  185. by Albert C. Baugh.   This accent has been optimized with Narrator 37.7 and
  186. requires Translator43.
  187.  
  188. 5.3  Paris.Accent. (Ax_0Paris.lha)
  189.  
  190.     A rather crude experimental stop-gap French accent developed from
  191. several English guides on French pronunciation.  Optimized with Narrator
  192. 37.7. Requires Translator43.
  193.  
  194. 5.4  !USA.Accent.  (Ax_1USA.lha)
  195.  
  196.     This is an extensive USA American accent developed new from scratch. It
  197. is about 12 times the size of the standard "American accent."  The goal is
  198. to approximate the USA Broadcast Standard Accent. The following features
  199. are included:
  200.  
  201.   a.  Arabic and Roman numeral conversion
  202.  
  203.   b.  Silent 'e' detection in many compound words
  204.  
  205.   c.  British spelling recognition
  206.  
  207.   d.  Resolution strategies for some common homographs (lead, live, read,
  208.       wind), words with the same spelling but different pronunciations.
  209.  
  210.   e   Recognition of many place and personal names
  211.  
  212.   f.  Conversational, non-formal pronunciation
  213.  
  214. The large size of this accent allows a much higher accuracy than the
  215. standard American accent, however 68000 based systems may experience a 2
  216. second delay per 80 character line of text and a 30 to 60 second initial
  217. loading delay while the accent is compiled at first use.  The speech is
  218. quite snappy on a 68040 based system at my recommended 210 word per minute
  219. speaking rate setting.
  220.  
  221. The basic reason for the large size of this file is that the spelling of
  222. English words has become more a matter of tradition than phonetics.  The
  223. traditional spellings of most basic English words were established in the
  224. Middle English period based on a Latin model.  Most of the changes in
  225. English pronunciation since that time are not reflected in the spelling.
  226. These changes include final e silencing, loss of the guttural gh sound,
  227. and the Great (Long-)Vowel Shift.  Words imported or "borrowed" from other
  228. languages tend to retain their native spellings. The rules for spelling and
  229. pronouncing imported words from classical Latin and Greek have remained
  230. essentially the same.  (This is why "machine" does not rhyme with "shine".)
  231. Through these and other processes, the pronunciation rules for English
  232. words have become quite complicated.
  233.  
  234.  
  235. 6.    Translator Preferences Program and Other Utilities.
  236.  
  237.     See the Translator42 Translator.man for information on the Translator42
  238. utilities.  For Translator43, the example how a new accent may be selected
  239. by in-line text should be modified to read as follows:
  240.  
  241.     \english{ Hello. Beastly hot weather this!
  242.     Yes, hello.  My name is {\maori Hone Ropata}
  243.     and I am \maori{Maori.}}
  244.  
  245.    The  character is the "rub-out" character, ASCII 127 decimal, that was
  246. added in Translator43 as an additional qualifier to reduce problems reading
  247. general text that may contain ASCII art.  Do NOT try to insert this
  248. "rub-out" character in the preference boxes.
  249.  
  250.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  251.  *   Note:  The information in the following section is primarily for    *
  252.  *   those who wish to create or modify accent files.  Other users may   *
  253.  *   ignore this section.                                                *
  254.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  255.  
  256. 7.    Accent file Format.
  257.  
  258.   For the most part, accent files for Translator42 will be compatible with
  259. Translator43.  The Italiano.accent must be changed because it has an
  260. embedded reference to the English accent that is no longer supported.  A
  261. patch for a modified Italiano.accent is included.  The only possible
  262. problems would be with files that use the defunct %separator directive,
  263. used [¶ in the match string or that used {! or {& in the phoneme string. 
  264. See translator.man for a complete description of the basic format.  Each
  265. line of the file may be one of the following types:
  266.  
  267.  
  268.    1. Blank lines are ignored.
  269.  
  270.    2. Comment lines beginning with `#' are ignored.
  271.  
  272.    3. Directives begin with `%'.
  273.  
  274.    4. All other lines are pronunciation rules.
  275.  
  276.  
  277. 7.1.  Directives.  Directives in an accent file are introduced by a percent
  278. character (%) followed by the name of the directive and its arguments. 
  279. Below is a summary of the directives in Translator43.  The Translator42
  280. manual, translator.man, is referenced where no change applies.
  281.  
  282.  
  283. 7.1.1.  Directive:  stress.
  284.  
  285.         Syntax:     %stress <N>
  286.  
  287.         Description: See Translator.man.
  288.  
  289.  
  290. 7.1.2.  Directive:  emphasis.
  291.  
  292.         Syntax:    %emphasis <N>
  293.  
  294.         Description: See Translator.man.
  295.  
  296. 7.1.3.  Directive:  class
  297.  
  298.         Syntax:   %class <member> [ <member> ... ]
  299.  
  300.         Description: See Translator.man.
  301.  
  302. 7.1.4.  Directive:  complain
  303.  
  304.         Syntax:     %complain <level>
  305.  
  306.         Description: See Translator.man.
  307.  
  308. 7.1.5   Directive: alphabet (new with version 43)
  309.  
  310.         Syntax:   %alphabet <character list>
  311.  
  312.  
  313.         Description:   This command can be used to define the *characters*
  314. that constitute words. The default is approximately equivalent to the
  315. following:
  316.  
  317. %alphabet aáàâãä bcd ð éèêë fgh iíìîï jklmnñ oóòôõö pqrs ß t þ uúùûü vwxyz
  318.  
  319. Note that UNLIKE the class entries, only single characters are accepted,
  320. spaces are totally ignored as delimiters.  These characters are used to
  321. build a random access lookup table that defines the alphabet status of each
  322. character.  Each character in the list causes its table entry to be set to
  323. one.
  324.  
  325. 7.1.6   Directive: separator (obsolete, not recognized) 
  326.  
  327.  
  328. 7.2  New Context Rules.  See 7.2 of translator.man for the basic context
  329. rules.
  330.  
  331. 7.2.1  Background: General Sequence of Operation.
  332.  
  333.   The client program that calls the Translator Library provides a pointer
  334. to the text string to be translated, its length in bytes, a pointer to a
  335. buffer to hold the translated output, and its length in bytes.  The input
  336. source string is copied to a new reference buffer, delimited on each end
  337. with nulls, and converted to upper-case.
  338.  
  339.   Then the source reference buffer is translated by a progressive, single
  340. pass process that searches character by character for applicable rules.
  341. Rules consist of:
  342.  
  343.  (1.) an optional prefix requirement string,
  344.  
  345.  (2.) a mandatory [match] string, 
  346.  
  347.  (3.) an optional suffix requirement string, and 
  348.  
  349.  (4) a mandatory = followed by phoneme replacement string, or {text
  350.      replacement string}, or an empty space.
  351.  
  352. Examples:
  353.  
  354. LAB[OURA]TORY = RAH              | OURA is converted to phonemes RAH.
  355. $T[A]K(vowel)$ = EY4             | A is converted to EY4.
  356.                                  |
  357. $["WW\ II"]$ = { world war two } | WW 2 will be converted to string 
  358.                                  | "world war two" and then, that string
  359.                                  | may be translated to  something like
  360.                                  |  "WER4LD WAA4R TUW4" independently.
  361.                                  |
  362. $MAK[E]$ =                       | Silent E. silenced.
  363.  
  364.   Each rule's [match] string is compared with the text in the reference
  365. buffer; then the prefix and the suffix requirements are tested.  If the
  366. prefix and suffix requirements are satisfied, then the replacement rule is
  367. applied.  This rule either provides output phoneme text directly (the
  368. normal case) or provides a replacement string that is decoded in isolation
  369. to create the phonemes for the matched text.  The process then continues on
  370. the source reference buffer at the next unmatched character.  When the end
  371. of the source reference buffer is reached, a normal null return is
  372. executed.  If the end of the output buffer is reached first, the output
  373. buffer is closed off with a null at the end of the last fully translated
  374. word and the routine returns a negative number representing the number of
  375. fully translated characters (if less than -8).
  376.  
  377. 7.2.2  Modified: Pattern Codes.
  378.  
  379.   The left and right contexts are strings which may contain pattern codes.
  380. These include:
  381.  
  382.     (<class>)   Must match one member of a class
  383.     (<class>+)  Must match one or more members of a class
  384.     (<class>;)  Must match zero or only one member of a class <new>
  385.     (<class>*)  Must match zero or more members of a class
  386.     (<class>~)  Must not be a member of a class
  387.     @           Must be and alphabet character  <new>
  388.     $           Must be a  non-alphabet word separator <modified>
  389.  
  390. 7.2.3  New: Empty Match.
  391.  
  392.   The match string may now contain the empty match indicator ¶ (ALT P).  If
  393. the prefix and suffix condition match, then the specified phonemes or text
  394. characters are inserted at that point.  An empty match does not, BY ITSELF,
  395. advance the translation pointer on the input reference buffer.  Once an
  396. empty match has been found and executed; it, and all proceeding empty
  397. matches are disabled until the current reference buffer character has been
  398. processed.  Empty matches may be hidden by a proceeding normal match, but
  399. they will not hide succeeding empty or normal matches at the same character
  400. position on the input reference buffer or current source string.
  401.  
  402. 7.2.4  Background: Search Lists.
  403.  
  404.   As in Translator42, rules are placed in one of 27 lists, depending on the
  405. first character of the match string.  Thus, when we encounter a letter `A'
  406. in the source text to be translated, we save time by only looking through
  407. the list of rules with match strings beginning with the letter `A'.   The
  408. relative order of the rules in each list is the same as that of the whole
  409. accent file.
  410.  
  411. 7.2.5  New: Rule List Cross-Posting.
  412.  
  413.   The rules for the empty match strings go in list zero for non-alphabetic
  414. character rules.  On an empty match condition,  the current source text
  415. character is equivalent to the first character of the rule's suffix pattern
  416. rather then the first character of the match string.  Thus, if this
  417. character corresponds to one of the other 26 lists, the rule would not be
  418. found.  To enable empty matches in these other lists, the syntax [¶@]
  419. (ALT-P Shift-2) has been added to cause an empty match rule to be
  420. cross-posted to all lists.  Each cross-post stub references the entry in
  421. list zero.  Empty match cross-posting is not automatic because the
  422. predominant usage of this function is with numbers, where it is not
  423. required.  Cross-posting is only required if the first character of the
  424. required suffix pattern may be alphabetic.  
  425.  
  426. 7.2.6 NEW: Suffix Text Induction.
  427.  
  428.   Translator43 allows the induction of text following matched text into the
  429. text replacement string on text replacement rules.  Text induction modes
  430. indicated are indicated by the first character after the leading brace.  In
  431. these modes, a temporary string is created that combines the bracketed text
  432. from the rules replacement text string with a delimited number of suffix
  433. characters.  Leading or text swap induction is indicated by {& ...} and
  434. trailing induction is indicated  {!...}.  For example, the rule:
  435.  
  436. [2](digit)(digit~) = {& and twenty}
  437.  
  438. will create a replacement string "4 and twenty" for 24 and the rule:
  439.  
  440. [2](digit)(digit~) = {!twenty }
  441.  
  442. will create a replacement string "twenty 4" for 24.  This feature should
  443. only be used where the suffix pattern rule guarantees the nature of the
  444. induced characters.  Text induction advances the current source pointer
  445. for each character induced even with an empty match.
  446.  
  447.  
  448. 7.2.7  New: Text Induction Syntax.
  449.  
  450.   The number of characters to be induced may be specified by repeating the
  451. text induction indicator.  For example, the rules:
  452.  
  453.  
  454. #short number indicator
  455. %class Ñ 0 1 2 3 4 5 6 7 8 9 
  456. #short number or number and comma separator
  457. %class Ç 0\, 1\, 2\, 3\, 4\, 5\, 6\, 7\, 8\, 9\, 0 1 2 3 4 5 6 7 8 9
  458.  
  459. [¶](Ñ)(Ñ)(Ç) (Ñ)(Ñ)(Ñ) (Ñ~) = {&&& thousand}
  460.  
  461.  
  462. will create a replacement string "375 thousand" from 375699.  It is also
  463. possible to induct the whole matching suffix by placing an `*' after the
  464. text induction specifier as in the following example:
  465.  
  466.  
  467. #general numeric class
  468. %class numeric \, \. 0 1 2 3 4 5 6 7 8 9
  469.  
  470.  
  471. [$](numeric+) = {&* dollars}
  472.  
  473.  
  474. where $1,235.23 would create a replacement string "1,235.23 dollars".  Note
  475. that space, quotes, ¶ (ALT P), ), (, ], [,and \ are the only characters
  476. that must be escaped in a match string if used as literal characters.
  477.  
  478. 7.2.8  CAUTION: Recursion Hazard. 
  479.  
  480.   Accent file programmers should be aware that there is an increased risk
  481. of rule recursion in text induction rules, especially with empty pattern
  482. match and whole suffix induction rules.  These text induction rules must be
  483. written to prevent the application of that SAME rule to its OWN replacement
  484. string. If the whole suffix is inducted on an empty match [¶], then there
  485. MUST be a prefix pattern requirement that CAN NOT be met by the text in the
  486. new replacement string. 
  487.  
  488. Examples:
  489.  
  490. Bad Rule --
  491. $[¶](numeric+)$ = {!* number }
  492.  
  493. This rule would cause the creation of a new string containing the text
  494. " number " and the class numeric text.  The text "number" would be
  495. converted to something like "NAH4MBER" in the output buffer and respond to
  496. the class numeric text string by spawning an additional "number"-numeric
  497. string just like the previous string.  This recursive spawning would
  498. continue until the maximum recursion limit is reached.
  499.  
  500.   Translator42/43 allow replacements nested 64 deep.  If this limit is
  501. exceeded, the program aborts the current line of text.
  502.  
  503. Better Rule --
  504.  
  505. %class numeric      0 1 2 3 4 5 6 7 8 9 \. \,
  506. %class numberdone   "number " 0 1 2 3 4 5 6 7 8 9 \. \,
  507.  
  508. $(numberdone~)[¶](numeric+)$ = {!* number }
  509.  
  510.   The prefix requirement, (numberdone~), will prevent the recursive
  511. application of the rule.  To be fully effective, the class numberdone or
  512. the prefix requirement should include provisions to anticipate the effects
  513. of all your other replacement rules on the numeric sequence.
  514.  
  515. Good Rule -- 
  516.  
  517. %class num      0 1 2 3 4 5 6 7 8 9
  518. %class tmark        \,
  519.  
  520. (num~)(num;)(num;)(num)(tmark;)[000](num~)={ thousand }
  521. (num~)(num;)(num;)(num)(tmark;)[00](num)(num~)={!* thousand and }
  522. (num~)(num;)(num;)(num)(tmark;)[0](num)(num)(num~)={!* thousand and }
  523.  
  524. (num~)(num;)(num;)(num)(tmark;)[¶](num)(num)(num)(num~)={!* thousand }
  525.  
  526.  Note that this rule would convert a number string like 
  527. [... 65,321 ...] to [... 65,{ thousand 321 } ...].
  528.         ^                    ^
  529.   Recursion does not occur in this case because the required prefix does
  530. not exist in the new string { thousand 321 }.  This example assumes that
  531. the "65," has been processed.
  532.  
  533. 7.2.9  Eliminated: Language Changing Directives.
  534.  
  535.   Language changing in-line directives within the braces are no longer
  536. supported in Translator43. The previous example of this in the Translator42
  537. version of the Italiano accent file:
  538.  
  539. [computer] = {\english computer}     must be changed to:
  540.  
  541. [computer] = KUMPYUW3TAH             to produce the same effect.
  542.  
  543.   This is the only known instance where this feature was used.
  544.  
  545.   Direct insertion of the required phonemes eliminates potential problems
  546. resulting from the user redefining or disabling these directives and
  547. removes the requirement that the other language be present.
  548.  
  549.   The translator preferences tool may be used to determine the phonemes to
  550. be copied from a foreign language by the accent file programmer.
  551.  
  552. 7.3   Phonemes.
  553.  
  554.   The phonemes listed in the original manual are reproduced here for easy
  555. reference.
  556.  
  557. 7.3.1  Narrator Considerations.  The last versions of the Narrator device I
  558. have are version V33.2 (5 Mar 1986), file size 23280 bytes, issued with OS
  559. 1.3 and version V37.7. (22 May 1991), 65760 bytes, issued with OS 2.04. The
  560. narrator programs function as programmable voice simulators and are capable
  561. of a wide range of effects.  Narrator 33.2 simulates three vocal tract
  562. resonances or formants, the minimum required for good intelligible speech.
  563. Narrator 37.7 provides 5 formants for a more natural sounding voice.  Also
  564. the frequencies and amplitudes of the three primary formants may be
  565. adjusted to change the quality of the voice. The original developer,
  566. SoftVoice Inc, is the only entity with the legal right to distribute or
  567. authorize distribution of that software.
  568.  
  569.  
  570. 7.3.2   Non-English Phonemes.  The basic phonemes provided by the narrator
  571. appear to be intended for English only. Narrator 37.7 appears to be more
  572. English specific than narrator 33.2 as it replaces /C phoneme with CH.
  573. However, as each phoneme is blended with its surrounding phonemes, it may
  574. be possible to create vowel or consonant clusters that provide better
  575. approximations for non-English sounds.  This is most effective at rapid
  576. speaking rates.  The missing /C phoneme may be approximated by KZH, KZHQ,
  577. or KZH/H with narrator 37.7.  In this case, the unvoiced surrounding
  578. consonants silence the ZH and the ZH muffles the impulse of the K sound.
  579.  
  580. 7.3.3   Phoneme List.  The following is the list of "ARPAbet" phonemes used
  581. by the Narrator device. 
  582.  
  583.   Vowels         English
  584.     IY           bEEt,    EAt
  585.     IH           bIt,    In
  586.     EH           bEt,    End
  587.     AE           bAt,    Ad
  588.     AA           bArgain,    tArget
  589.     AH           tUg,    bUg,    bUt,    Up
  590.     AO           shORE,    wAR
  591.     UH           bOOk,    sOOt
  592.     ER           bIRd,    EArly
  593.     OH           bOrder (sounds like the letter 'O' when used by itself)
  594.     AX           About (never stressed)
  595.     IX           solId (never stressed)
  596.     
  597.  
  598.     Dipthongs
  599.     EY           bAY,    AId
  600.     AY           bIde,    I
  601.     OY           bOY,    OIl
  602.     AW           bOUnd,    OWl
  603.     OW           bOAt,    OWn
  604.     UW           brEW,    bOOlean, pOO,
  605.                     crEW (except that it is a dipthong)
  606.     
  607.  
  608.     Consonants
  609.     R            Red
  610.     RX           Red (This is not mentioned in RKRM:Devs)
  611.     W            Wag
  612.     M            Men
  613.     NX           siNG
  614.     S            Soon
  615.     F            Fed
  616.     Z            haS,    Zoo
  617.     V            Very
  618.     CH           CHeck
  619.     /H           Hole
  620.     B            But
  621.     D            Dog
  622.     K            Keg,    Copy
  623.     L            Long
  624.     LX           Long (This is not mentioned in RKRM:Devs)
  625.     Y            Yellow
  626.     N            No
  627.     SH           SHy
  628.     TH           THin
  629.     ZH           pleaSure
  630.     DH           THen
  631.     WH           WHen
  632.     J            JuDGE
  633.     /C           supposedly loCH, or (german) baCH, but really like CHurCH
  634.  
  635.                  Narrator version 37.7 pronounces this sound like the
  636.                  German tsch, English ch as stated above.  KZH, /HZH; or
  637.                  KZH/H, /HZH/H when followed by vowels; sound closer to
  638.                  the mark.
  639.  
  640.     P            Put
  641.     T            Toy (except before IY when it is pronounced D)
  642.     G            Guest
  643.  
  644.  
  645.     Others
  646.     DX           piTY (tongue flap)
  647.     Q            kitt(Q)en (glottal stop)
  648.     QX           (Silent vowel - can lenghten the previous vowel)
  649.     
  650.  
  651.     Contractions
  652.     UL           AXL
  653.     IL           IXL
  654.     UM           AXM  (almost equal )
  655.     IM           IXM
  656.     UN           AXN  (almost equal )
  657.     IN           IXN
  658.  
  659.  
  660.     Symbols
  661.     Digits 1-9    Syllabic stress
  662.     .            Sentence final character
  663.     ?            Question sentence final character
  664.     -            Phrase delimiter
  665.     ,            Clause delimiter
  666.     ()           Put parentheses about noun phrases
  667.     
  668.     ##           End of speech  (undocumented)
  669.  
  670.  
  671.     Translator
  672.     `            Do not add stress marks to this word
  673.     #            Word boundard for the purposes of adding stress marks
  674.  
  675.